Expand description
§Surf the web - HTTP client framework
Surf is a Rust HTTP client built for ease-of-use and multi-HTTP-backend flexibility. Whether it’s a quick script, or a cross-platform SDK, Surf will make it work.
- Extensible through a powerful middleware system
- Multiple HTTP back-ends that can be chosen
- Reuses connections through a configurable
Client
interface - Fully streaming requests and responses
- TLS enabled by default (native tls or rustls)
- Built on async-std (with optional tokio support)
§Examples
let mut res = surf::get("https://httpbin.org/get").await?;
dbg!(res.body_string().await?);
It’s also possible to skip the intermediate Response
, and access the response type directly.
dbg!(surf::get("https://httpbin.org/get").recv_string().await?);
Both sending and receiving JSON is real easy too.
#[derive(Deserialize, Serialize)]
struct Ip {
ip: String
}
let uri = "https://httpbin.org/post";
let data = &Ip { ip: "129.0.0.1".into() };
let res = surf::post(uri).body_json(data)?.await?;
assert_eq!(res.status(), 200);
let uri = "https://api.ipify.org?format=json";
let Ip { ip } = surf::get(uri).recv_json().await?;
assert!(ip.len() > 10);
And even creating streaming proxies is no trouble at all.
let req = surf::get("https://img.fyi/q6YvNqP").await?;
let body = surf::http::Body::from_reader(req, None);
let res = surf::post("https://box.rs/upload").body(body).await?;
Setting configuration on a client is also straightforward.
use std::convert::TryInto;
use std::time::Duration;
use surf::{Client, Config};
use surf::Url;
let client: Client = Config::new()
.set_base_url(Url::parse("http://example.org")?)
.set_timeout(Some(Duration::from_secs(5)))
.try_into()?;
let mut res = client.get("/").await?;
println!("{}", res.body_string().await?);
§Features
The following features are available. The default features are
curl-client
, middleware-logger
, and encoding
curl-client
(default): usecurl
(throughisahc
) as the HTTP backend.h1-client
: useasync-h1
as the HTTP backend with native TLS for HTTPS.h1-client-rustls
: useasync-h1
as the HTTP backend withrustls
for HTTPS.hyper-client
: usehyper
(hyper.rs) as the HTTP backend.wasm-client
: usewindow.fetch
as the HTTP backend.middleware-logger
(default): enables logging requests and responses using a middleware.encoding
(default): enables support for body encodings other than utf-8.
Re-exports§
pub use http_types as http;
Modules§
- Middleware types
- Miscellaneous utilities.
Structs§
- A streaming HTTP body.
- An HTTP client, capable of sending
Request
s and running a middleware stack. - Configuration for
surf::Client
s and their underlying HTTP clients. - An error occurred while decoding a response body to a string.
- The error type for HTTP operations.
- An HTTP request, returns a
Response
. - Request Builder
- An HTTP response, returned by
Request
. - A parsed URL record.
Enums§
- HTTP response status codes.
Traits§
- An abstract HTTP client.
- Provides the
status
method forResult
andOption
.
Functions§
- Construct a new
Client
, capable of sendingRequest
s and running a middleware stack. - Perform a one-off
CONNECT
request. - Perform a one-off
DELETE
request. - Perform a one-off
GET
request. - Perform a one-off
HEAD
request. - Perform a one-off
OPTIONS
request. - Perform a one-off
PATCH
request. - Perform a one-off
POST
request. - Perform a one-off
PUT
request. - Perform a one-off
TRACE
request.
Type Aliases§
- A specialized Result type for Surf.